package com.wfm.schedule;

import com.wfm.constants.Constants;
import com.wfm.loader.Loader;
import com.wfm.queue.DataQueue;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

@Service
@Slf4j
public class QueueNumMonitor {


    @Autowired
    private Loader fileLoader;

    @Autowired
    private DataQueue dataQueue;

    // 定时任务，每隔五秒执行一次。扫描数量，如果数量不足 500w，就生成数据。
    // 按照 QPS 2w/s 算，可以支撑 4 分钟的使用量。 每隔 5s 扫描一下，每次补充 100w 数据，基本保证补充线程与获取线程不互相影响。
    @PostConstruct
    public void init() {
        log.info("【监听队列服务】检测队列URL个数服务启动...");
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
        scheduledExecutorService.scheduleAtFixedRate(() -> {
            log.info("【监听队列服务】检测队列URL个数开始");
            int size = dataQueue.size();
            log.info("【监听队列服务】队列URL个数{}",size);
            if (size<Constants.MIN_DATA_SIZE){
                List<String> load = fileLoader.load();
                log.info("当前队列URL个数{}小于{}，补充数据{}",size,Constants.MIN_DATA_SIZE,load.size());
                if(!load.isEmpty()){
                    dataQueue.add(load);
                }
            }
            log.info("【监听队列服务】检测队列URL个数结束");
        }, 0, 5, TimeUnit.SECONDS);
    }

}
